#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int T,n,m,L,V,num=0;
int d[N],v[N],a[N],q[N],cnt[N*100];
void dis(int d,int v,int a){
    int dist=d;
    bool flag=0;
    if(a>0){
        dist+=(V*V-v*v)/a>>1;
        if(dist>L)return ;
        for(int i=1;i<=m;i++)
            if(q[i]>dist){
                cnt[i]++;
                if(flag==0)
                {
                    num++;
                    flag=1;
                    }
            }
    }
    if(a<0){
        if(v<=V)return;
        dist+=(V*V-v*v)/a>>1;
        for(int i=1;i<=m;i++)
            if(q[i]<dist&&q[i]>=d){
                cnt[i]++;
                if(flag==0)
                {
                    num++;
                    flag=1;
                    }
            }
    }
    if(a==0&&v>V){
        for(int i=1;i<=m;i++){
            if(q[i]>d){
                cnt[i]++;
                if(flag==0)
                {
                    num++;
                    flag=1;
                    }
            }
        }
    }
}
int main()
{
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    scanf("%d",&T);
    while(T--){
        int ma=0;
        num=0;
        memset(cnt,0,sizeof cnt);
        scanf("%d%d%d%d",&n,&m,&L,&V);
        for(int i=1;i<=n;i++){
            scanf("%d%d%d",&d[i],&v[i],&a[i]);
        }
        for(int i=1;i<=m;i++)
           scanf("%d",&q[i]);
        for(int i=1;i<=n;i++){
                dis(d[i],v[i],a[i]);
        }
        for(int i=1;i<=m;i++){
            ma=max(ma,cnt[i]);
        }
        printf("%d %d",num,m-(num-ma+1));
    }
    return 0;
}
